package org.example.flea_market_mvc.param;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Data;

/**
 * 商品参数类
 * 用于接收前端传入的商品相关请求参数
 */
@Data
public class ProductParam {
    @NotNull(message = "商品名称不能为空")
    @Size(max = 200, message = "商品名称长度不能超过200")
    private String name;           // 商品名称
    @NotNull(message = "商品价格不能为空")
    @Min(value = 0, message = "商品价格不能为负数")
    private BigDecimal price;      // 商品价格
    @NotNull(message = "原始价格不能为空")
    @Min(value = 0, message = "原始价格不能为负数")
    private BigDecimal originalPrice;  // 原始价格（用于显示折扣）
    @Size(max = 1000, message = "商品详细描述长度不能超过1000")
    private String description;    // 商品详细描述
    @NotNull(message = "商品分类ID不能为空")
    private Integer categoryId;    // 商品分类ID
    @NotNull(message = "卖家用户ID不能为空")
    private Integer sellerId;      // 卖家用户ID
    @NotNull(message = "商品库存不能为空")
    @Min(value = 0, message = "商品库存不能为负数")
    private Integer stock;         // 商品库存
    private LocalDateTime expireTime;  // 商品过期时间（NULL表示永不过期）
    @NotNull(message = "商品状态不能为空")
    // 这里假设ProductStatusEnum有合理的范围，根据实际情况修改
    @Min(value = 1, message = "商品状态值无效")
    @Max(value = 5, message = "商品状态值无效")
    private Integer status;        // 商品状态（使用ProductStatusEnum枚举值）
    @Size(max = 1000, message = "商品图片URL列表长度不能超过1000")
    private String images;         // 商品图片URL列表（用逗号分隔）
    @Size(max = 200, message = "商品标签长度不能超过200")
    private String tags;           // 商品标签（如"99新","包邮","可议价"）
    @Size(max = 200, message = "地理位置长度不能超过200")
    private String location;       // 地理位置（卖家发货地）
    @Size(max = 1000, message = "商品属性JSON长度不能超过1000")
    private String attributes;     // 商品属性JSON（如尺寸、颜色等）
    private Integer pageNum; // 当前页码
    private Integer pageSize; // 每页数量
}